home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 3 / ACE CD 3.iso / files / utils / aplay200.lha / APlayer / Files / Developer.lha / Examples / apFuture13Library.S < prev    next >
Text File  |  1995-12-23  |  25KB  |  1,122 lines

  1. ; $VER: Future13.library 3.1
  2. ;
  3.  
  4.     INCDIR    "Includes3.0:Include3.0/"
  5.     INCLUDE    "Exec/Types.i"
  6.     INCLUDE    "Own/SystemBases.i"
  7.     INCLUDE    "Own/SystemStructures.i"
  8.     INCLUDE    "Own/SystemOffsets.i"
  9.     INCLUDE    "Own/AccessiblePlayer.i"
  10.  
  11.  
  12. VERSION        =    3
  13. REVISION    =    1
  14.  
  15. TRUE        =    -1
  16. FALSE        =    0
  17.  
  18. ; Library Data
  19.  
  20. LN_Name        =    10
  21. LN_Type        =    8
  22. NT_Library    =    9
  23.  
  24. LIBB_Summing    =    0
  25. LIBB_Changed    =    1
  26. LIBB_SumUsed    =    2
  27. LIBB_DelExp    =    3
  28.  
  29. LIBF_Summing    =    1<<LIBB_Summing
  30. LIBF_Changed    =    1<<LIBB_Changed
  31. LIBF_SumUsed    =    1<<LIBB_SumUsed
  32. LIBF_DelExp    =    1<<LIBB_DelExp
  33.  
  34. ; Macros
  35.  
  36. INBYTE    MACRO
  37.     dc.b    %11100000,0
  38.     dc.w    \1
  39.     dc.b    \2,0
  40.     ENDM
  41.  
  42. INWORD    MACRO
  43.     dc.b    %11010000,0
  44.     dc.w    \1,\2
  45.     ENDM
  46.  
  47. INLONG    MACRO
  48.     dc.b    %11000000,0
  49.     dc.w    \1
  50.     dc.l    \2
  51.     ENDM
  52.  
  53. ; Library Base Structure
  54.  
  55.     STRUCTURE LibraryStruct,0
  56.     STRUCT    LIB_Node,14
  57.     UBYTE    LIB_Flags
  58.     UBYTE    LIB_Pad
  59.     UWORD    LIB_NegSize
  60.     UWORD    LIB_PosSize
  61.     UWORD    LIB_Version
  62.     UWORD    LIB_Revision
  63.     APTR    LIB_IDString
  64.     ULONG    LIB_Sum
  65.     UWORD    LIB_OpenCnt
  66.  
  67.     LONG    LIB_SegList
  68.     LABEL    LibraryStruct_SIZEOF
  69.  
  70.  
  71.     SECTION    Future13.library,CODE
  72.  
  73. START    moveq    #0,d0
  74.     rts
  75. ;------------------------------------------------------------------------------
  76. LIBNAME    dc.b    "apFuture13.library",0
  77.  
  78. LIBID    dc.b    "Future13.library 3.1 (5-December-1995)",0
  79.     even
  80. ;------------------------------------------------------------------------------
  81. ; ROMTAG Structure
  82. ;
  83.  
  84. ROMTAG    dc.w    $4afc            ;ROMTAG Indentifier
  85.     dc.l    romtag
  86.     dc.l    slut
  87.     dc.b    $80            ;Flags
  88.     dc.b    version
  89.     dc.b    $09            ;Type Of Module
  90.     dc.b    $00            ;Initialization Priority
  91.     dc.l    libname
  92.     dc.l    libid
  93.     dc.l    autinit            ;Pointer To AUTOINIT Table
  94. ;------------------------------------------------------------------------------
  95. ; AUTOINIT Table
  96. ;
  97.  
  98. AUTINIT    dc.l    LibraryStruct_SIZEOF    ;Size Of Structure AFTER Base Address
  99.     dc.l    vector            ;Pointer To Vector Table
  100.     dc.l    inittab            ;Pointer To Init Structure
  101.     dc.l    init            ;Pointer To Init Routine
  102. ;------------------------------------------------------------------------------
  103. ; Init Table
  104. ;
  105.  
  106. INITTAB    INBYTE    LN_Type,NT_Library
  107.     INBYTE    LIB_Flags,LIBF_SumUsed!LIBF_Changed
  108.     INWORD    LIB_Version,version
  109.     INWORD    LIB_Revision,revision
  110.     INLONG    LN_Name,libname
  111.     INLONG    LIB_IDString,libid
  112.     dc.l    0
  113. ;------------------------------------------------------------------------------
  114. ; Vector Table
  115. ;
  116.  
  117. VECTOR    dc.w    -1
  118.     dc.w    opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
  119.     dc.w    FC_GetTags-vector
  120.     dc.w    -1
  121. ;------------------------------------------------------------------------------
  122. ; Init Routine
  123. ;
  124.  
  125. INIT    movem.l    d1-d7/a0-a6,-(sp)
  126.     move.l    d0,a4            ;Base Address
  127.     move.l    a0,LIB_SegList(a4)
  128.  
  129.     move.l    a4,d0
  130.     movem.l    (sp)+,d1-d7/a0-a6
  131.     rts
  132. ;------------------------------------------------------------------------------
  133. ; Offset  -6: Open Library
  134. ;
  135.  
  136. OPNLIB    addq.w    #1,LIB_OpenCnt(a6)
  137.     bclr    #LIBB_DelExp,LIB_Flags(a6)
  138.     move.l    a6,d0
  139.     rts
  140. ;------------------------------------------------------------------------------
  141. ; Offset -12: Close Library
  142. ;
  143.  
  144. CLSLIB    moveq    #0,d0
  145.     subq.w    #1,LIB_OpenCnt(a6)
  146.     bne.b    clslibo
  147.     btst    #LIBB_DelExp,LIB_Flags(a6)
  148.     bne.b    expunge
  149. CLSLIBO    rts
  150. ;------------------------------------------------------------------------------
  151. ; Offset -18: Expunge
  152. ;
  153.  
  154. EXPUNGE    movem.l    d1-d7/a0-a6,-(sp)
  155.     move.l    a6,a4
  156.     tst.w    LIB_OpenCnt(a4)
  157.     beq.b    exp1
  158.     bset    #LIBB_DelExp,LIB_Flags(a4)
  159.     moveq    #0,d0
  160.     bra.b    expungo
  161.  
  162. EXP1    move.l    4.w,a6
  163.     move.l    LIB_SegList(a4),d2
  164.     move.l    a4,a1
  165.     jsr    Remove(a6)
  166.  
  167.     move.l    a4,a1
  168.     moveq    #0,d0
  169.     move.w    LIB_NegSize(a4),d0
  170.     sub.l    d0,a1
  171.     add.w    LIB_PosSize(a4),d0
  172.     jsr    FreeMem(a6)
  173.     move.l    d2,d0
  174.  
  175. EXPUNGO    movem.l    (sp)+,d1-d7/a0-a6
  176.     rts
  177. ;------------------------------------------------------------------------------
  178. ; Offset -24: ExtFunc
  179. ;
  180.  
  181. EXTFUNC    moveq    #0,d0
  182.     rts
  183. ;------------------------------------------------------------------------------
  184. ;******************************************************************************
  185. ;* Future Composer 1.0-1.3 Player
  186. ;******************************************************************************
  187. ;------------------------------------------------------------------------------
  188.     STRUCTURE Future13Struct,0
  189.     APTR    F13_Global
  190.     APTR    F13_SEQPoint
  191.     APTR    F13_PATPoint
  192.     APTR    F13_FRQPoint
  193.     APTR    F13_VOLPoint
  194.     UWORD    F13_OnOff
  195.     WORD    F13_ReSpCnt
  196.     WORD    F13_RepSpd
  197.     WORD    F13_SpdTemp
  198.     UWORD    F13_AudTemp
  199.     STRUCT    F13_PerVol,16
  200.     STRUCT    F13_V1Data,64
  201.     STRUCT    F13_Offset1,2
  202.     STRUCT    F13_SSize1,2
  203.     STRUCT    F13_Start1,6
  204.     STRUCT    F13_V2Data,64
  205.     STRUCT    F13_Offset2,2
  206.     STRUCT    F13_SSize2,2
  207.     STRUCT    F13_Start2,6
  208.     STRUCT    F13_V3Data,64
  209.     STRUCT    F13_Offset3,2
  210.     STRUCT    F13_SSize3,2
  211.     STRUCT    F13_Start3,6
  212.     STRUCT    F13_V4Data,64
  213.     STRUCT    F13_Offset4,2
  214.     STRUCT    F13_SSize4,2
  215.     STRUCT    F13_Start4,6
  216.     STRUCT    F13_SoundInfo,10*10+47*10
  217.     LABEL    Future13Struct_SIZEOF
  218. ;------------------------------------------------------------------------------
  219. ; Offset -30: GetTags
  220. ;
  221. ; IN :    Nothing
  222. ;
  223. ; OUT:    A0 = Pointer To A TagList
  224. ;
  225.  
  226. FC_GetTags
  227.     lea    FC_Tags(pc),a0
  228.     rts
  229.  
  230. FC_Tags    dc.l    APT_RequestVersion,5
  231.     dc.l    APT_EarlyCheck,FC_TestModule
  232.     dc.l    APT_NotePlayer,FC_NotePlayer
  233.     dc.l    APT_DefaultPlayerInfo,FC_DefaultPlayerInfo
  234.     dc.l    APT_UsedChannels,FC_UsedChannels
  235.  
  236.     dc.l    APT_InitPlayer,FC_InitPlayer
  237.     dc.l    APT_EndPlayer,FC_EndPlayer
  238.     dc.l    APT_InitSound,FC_InitSound
  239.     dc.l    APT_EndSound,FC_EndSound
  240.     dc.l    APT_Interrupt,FC_PlayModule
  241.  
  242.     dc.l    APT_PlayerName,fcname
  243.     dc.l    APT_Description,fcdes
  244.  
  245.     dc.l    APT_Pause,TRUE
  246.  
  247.     dc.l    APT_GetSongLength,FC_GetSongLength
  248.  
  249.     dc.l    APT_GetSongPos,FC_GetSongPos
  250.     dc.l    APT_Rewind,FC_Rewind
  251.     dc.l    APT_Forward,FC_Forward
  252.     dc.l    TAG_END
  253.  
  254. FCNAME    dc.b    "Future Composer 1.0-1.3",0
  255. FCDES    dc.b    "Original player by SuperSero.",10
  256.     dc.b    "Adapted by Tax.",10,10
  257.     dc.b    "This player can play all modules",10
  258.     dc.b    "made with Future Composer 1.0 to",10
  259.     dc.b    "1.3.",10,10
  260.     dc.b    "This player uses a NotePlayer.",0
  261.     even
  262. ;------------------------------------------------------------------------------
  263. ; TestModule
  264. ;
  265. ; IN :    Nothing
  266. ;
  267. ; OUT:    D0 = Success (0=Unknown, 1=Ok, 2=Error)
  268. ;
  269.  
  270. FC_TestModule
  271.     movem.l    d1-d2/a0/a4-a5,-(sp)
  272.  
  273.     subq.l    #4,sp
  274.     moveq    #0,d1
  275.     moveq    #4,d2
  276.     move.l    sp,a0
  277.     move.l    APG_CheckLoad(a5),a4
  278.     jsr    (a4)            ;Load One Longword
  279.     move.l    (sp)+,d1
  280.     tst.l    d0
  281.     beq.b    .tsmod1
  282.  
  283.     moveq    #1,d0            ;Ok
  284.     cmp.l    #"SMOD",d1
  285.     beq.b    .tsmodo
  286.     moveq    #0,d0            ;Unknown
  287.     bra.b    .tsmodo
  288.  
  289. .TSMOD1    moveq    #2,d0            ;Error
  290. .TSMODO    movem.l    (sp)+,d1-d2/a0/a4-a5
  291.     rts
  292. ;------------------------------------------------------------------------------
  293. ; NotePlayer
  294. ;
  295. ; IN :    A1 = Address
  296. ;
  297. ; OUT:    A0 = Pointer To Info Table
  298. ;
  299.  
  300. FC_NotePlayer
  301. FC_DefaultPlayerInfo
  302.     lea    .nottab(pc),a0
  303.     rts
  304.  
  305. .NOTTAB    dc.w    ANF_Signed
  306.     dc.b    4,8,0
  307.     even
  308. ;------------------------------------------------------------------------------
  309. ; UsedChannels
  310. ;
  311. ; IN :    A1 = Address
  312. ;
  313. ; OUT:    D1 = Used Channels
  314. ;
  315.  
  316. FC_UsedChannels
  317.     moveq    #4,d1
  318.     rts
  319. ;------------------------------------------------------------------------------
  320. ; InitPlayer
  321. ;
  322. ; IN :    A1 = Address
  323. ;
  324. ; OUT:    D1 = Success (0=Error)
  325. ;
  326.  
  327. FC_InitPlayer
  328.     movem.l    d0/a0,-(sp)
  329.     move.l    APG_AllocChannels(a5),a0
  330.     jsr    (a0)
  331.     move.l    d0,d1
  332.     movem.l    (sp)+,d0/a0
  333.     rts
  334. ;------------------------------------------------------------------------------
  335. ; EndPlayer
  336. ;
  337. ; IN :    A1 = Address
  338. ;
  339. ; OUT:    Nothing
  340. ;
  341.  
  342. FC_EndPlayer
  343.     move.l    a0,-(sp)
  344.     move.l    APG_FreeChannels(a5),a0
  345.     jsr    (a0)
  346.     move.l    (sp)+,a0
  347.     rts
  348. ;------------------------------------------------------------------------------
  349. ; InitSound
  350. ;
  351. ; IN :    A1 = Address
  352. ;
  353. ; OUT:    Nothing
  354. ;
  355.  
  356. FC_InitSound
  357.     movem.l    d0-d3/d6-d7/a0-a6,-(sp)
  358.     lea    FC_DataArea,a4
  359.     move.l    a5,F13_Global(a4)
  360.  
  361.     move.w    #1,F13_OnOff(a4)
  362.     bset    #1,$bfe001        ;Turn Filter Off
  363.  
  364.     lea    100(a1),a0
  365.     move.l    a0,F13_SEQPoint(a4)
  366.     move.l    a1,a0
  367.     add.l    8(a1),a0
  368.     move.l    a0,F13_PATPoint(a4)
  369.     move.l    a1,a0
  370.     add.l    16(a1),a0
  371.     move.l    a0,F13_FRQPoint(a4)
  372.     move.l    a1,a0
  373.     add.l    24(a1),a0
  374.     move.l    a0,F13_VOLPoint(a4)
  375.     move.l    4(a1),d0
  376.     divu    #13,d0
  377.  
  378.     lea    F13_SoundInfo(a4),a2
  379.     moveq    #1,d2
  380.     moveq    #10-1,d1
  381. .INIMO1    clr.l    (a2)
  382.     addq.l    #6,a2
  383.     move.l    d2,(a2)+
  384.     dbra    d1,.inimo1
  385.  
  386.     moveq    #0,d2
  387.     moveq    #$10,d3
  388.     moveq    #$08,d7
  389.     moveq    #32-1,d1
  390. .INIMO2    move.l    d2,(a2)+
  391.     move.w    d3,(a2)+
  392.     move.l    d3,(a2)+
  393.     add.l    #$20,d2
  394.     dbra    d1,.inimo2
  395.  
  396.     moveq    #8-1,d1
  397. .INIMO3    move.l    d2,(a2)+
  398.     move.w    d7,(a2)+
  399.     move.l    d7,(a2)+
  400.     add.l    #$10,d2
  401.     dbra    d1,.inimo3
  402.  
  403.     move.l    d2,(a2)+
  404.     move.w    d3,(a2)+
  405.     move.l    d3,(a2)+
  406.     add.l    #$20,d2
  407.     move.l    d2,(a2)+
  408.     move.w    d7,(a2)+
  409.     move.l    d7,(a2)+
  410.     add.l    #$10,d2
  411.     REPT    2
  412.     move.l    d2,(a2)+
  413.     move.w    d3,(a2)+
  414.     move.l    d3,(a2)+
  415.     add.l    #$20,d2
  416.     ENDR
  417.     REPT    2
  418.     move.l    d2,(a2)+
  419.     move.w    d7,(a2)+
  420.     move.l    d7,(a2)+
  421.     add.l    #$10,d2
  422.     ENDR
  423.     move.l    d2,(a2)+
  424.     move.w    #$18,(a2)+
  425.     move.l    #$18,(a2)
  426.  
  427.     lea    40(a1),a0
  428.     lea    F13_SoundInfo+4(a4),a2
  429.     moveq    #10-1,d1
  430. .INIMO4    move.w    (a0)+,(a2)+
  431.     move.l    (a0)+,(a2)+
  432.     addq.l    #4,a2
  433.     dbra    d1,.inimo4
  434.  
  435.     moveq    #0,d2
  436.     move.l    a1,d1
  437.     add.l    32(a1),d1
  438.     sub.l    #WAVEFORMS,d1
  439.     lea    F13_SoundInfo(a4),a0
  440.     move.l    d1,(a0)+
  441.     moveq    #9-1,d3
  442. .INIMO5    move.w    (a0),d2
  443.     add.l    d2,d1
  444.     add.l    d2,d1
  445.     addq.l    #6,a0
  446.     move.l    d1,(a0)+
  447.     dbra    d3,.inimo5
  448.  
  449.     move.l    F13_SEQpoint(a4),a0
  450.     moveq    #0,d2
  451.     move.b    12(a0),d2        ;Get replay speed
  452.     bne.b    .inimo6
  453.     moveq    #3,d2            ;Set default speed
  454.  
  455. .INIMO6    move.w d2,F13_ReSpCnt(a4)    ;Init repspeed counter
  456.     move.w d2,F13_RepSpd(a4)
  457.  
  458.     clr.w    F13_AudTemp(a4)
  459.     clr.w    F13_SpdTemp(a4)
  460.     moveq    #0,d7
  461.     mulu    #13,d0
  462.  
  463.     lea    F13_V1data(a4),a0    ;Point to 1st voice data area
  464.     lea    SILENT(pc),a1
  465.     lea    o4a0c8(pc),a2
  466.     moveq    #4-1,d6            ;Number of soundchannels-1
  467. .INIMO7    move.l    a1,10(a0)
  468.     move.l    a1,18(a0)
  469.     clr.l    14(a0)
  470.     clr.b    45(a0)
  471.     clr.b    47(a0)
  472.     clr.w    8(a0)
  473.     clr.l    48(a0)
  474.     move.b    #$01,23(a0)
  475.     move.b    #$01,24(a0)
  476.     clr.b    25(a0)
  477.     clr.l    26(a0)
  478.     clr.w    30(a0)
  479.     moveq    #$00,d3
  480.     move.w    (a2)+,d1
  481.     move.w    (a2)+,d3
  482.     divu    #$0003,d3
  483.     move.b    d3,32(a0)
  484.     mulu    #$0003,d3
  485.     and.l    #$00ff,d3
  486.     and.l    #$00ff,d1
  487.     add.l    APG_ChannelInfo(a5),d1
  488.     move.l    d1,60(a0)
  489.     clr.w    64(a0)
  490.     move.l    F13_SEQPoint(a4),(a0)
  491.     move.l    F13_SEQPoint(a4),52(a0)
  492.     add.l    d0,52(a0)
  493.     add.l    d3,52(a0)
  494.     add.l    d7,(a0)
  495.     add.l    d3,(a0)
  496.     move.w    #$000d,6(a0)
  497.     move.l    (a0),a3
  498.     move.b    (a3),d1
  499.     andi.l    #$00ff,d1
  500.     lsl.w    #6,d1
  501.     move.l    F13_PATPoint(a4),a6
  502.     adda.l    d1,a6
  503.     move.l    a6,34(a0)
  504.     clr.l    38(a0)
  505.     move.b    #$01,33(a0)
  506.     move.b    #$02,42(a0)
  507.     move.b    1(a3),44(a0)
  508.     move.b    2(a3),22(a0)
  509.     clr.b    43(a0)
  510.     clr.b    45(a0)
  511.     clr.w    56(a0)
  512.     adda.w    #$004a,a0        ;Point to next voice's data area
  513.     dbra    d6,.inimo7
  514.  
  515.     movem.l    (sp)+,d0-d3/d6-d7/a0-a6
  516.     rts
  517. ;------------------------------------------------------------------------------
  518. ; EndSound
  519. ;
  520. ; IN :    A1 = Address
  521. ;
  522. ; OUT:    Nothing
  523. ;
  524.  
  525. FC_EndSound
  526.     clr.w    FC_DataArea+F13_OnOff
  527.     rts
  528. ;------------------------------------------------------------------------------
  529. ; GetSongLength
  530. ;
  531. ; IN :    A1 = Address
  532. ;
  533. ; OUT:    D1 = Length
  534. ;
  535.  
  536. FC_GetSongLength
  537.     move.l    4(a1),d1
  538.     divu    #13,d1            ;Song Length
  539.     rts
  540. ;------------------------------------------------------------------------------
  541. ; GetSongPos
  542. ;
  543. ; IN :    A1 = Address
  544. ;
  545. ; OUT:    D1 = Position (0-x)
  546. ;
  547.  
  548. FC_GetSongPos
  549.     move.l    a0,-(sp)
  550.     lea    FC_DataArea+F13_V1Data,a0
  551.     moveq    #0,d1
  552.     move.w    6(a0),d1
  553.     divu    #13,d1
  554.     subq.w    #1,d1
  555.     move.l    (sp)+,a0
  556.     rts
  557. ;------------------------------------------------------------------------------
  558. ; Rewind
  559. ;
  560. ; IN :    A1 = Address
  561. ;
  562. ; OUT:    D1 = New Position
  563. ;
  564.  
  565. FC_Rewind
  566.     movem.l    d0/d2/a0-a1,-(sp)
  567.  
  568.     bsr.b    FC_GetSongPos
  569.     tst.w    d1
  570.     bmi.b    fforwao
  571.     beq.b    fforwao
  572.     subq.w    #1,d1
  573.     bra.b    fforwa1
  574. ;------------------------------------------------------------------------------
  575. ; Forward
  576. ;
  577. ; IN :    A1 = Address
  578. ;
  579. ; OUT:    D1 = New Position
  580. ;
  581.  
  582. FC_Forward
  583.     movem.l    d0/d2/a0-a1,-(sp)
  584.  
  585.     bsr.b    FC_GetSongLength
  586.     move.w    d1,d0
  587.  
  588.     bsr.b    FC_GetSongPos
  589.     addq.w    #1,d1
  590.     cmp.w    d0,d1
  591.     blt.b    fforwa1
  592.     moveq    #0,d1
  593.  
  594. FFORWA1    move.w    d1,d2
  595.     mulu    #13,d2
  596.     moveq    #64,d0
  597.     lea    FC_DataArea,a0
  598.  
  599.     lea    F13_V1Data(a0),a1
  600.     move.w    d0,40(a1)        ;Reset Pattern Pos
  601.     move.w    d2,6(a1)        ;Set Song Position
  602.     lea    F13_V2Data(a0),a1
  603.     move.w    d0,40(a1)        ;Reset Pattern Pos
  604.     move.w    d2,6(a1)        ;Set Song Position
  605.     lea    F13_V3Data(a0),a1
  606.     move.w    d0,40(a1)        ;Reset Pattern Pos
  607.     move.w    d2,6(a1)        ;Set Song Position
  608.     lea    F13_V4Data(a0),a1
  609.     move.w    d0,40(a1)        ;Reset Pattern Pos
  610.     move.w    d2,6(a1)        ;Set Song Position
  611.  
  612. FFORWAO    movem.l    (sp)+,d0/d2/a0-a1
  613.     rts
  614. ;------------------------------------------------------------------------------
  615. SILENT    dc.w    $0100,$0000,$0000,$00e1
  616. o4a0c8    dc.w    NPChannel_SIZEOF*0,0,NPChannel_SIZEOF*1,3
  617.     dc.w    NPChannel_SIZEOF*2,6,NPChannel_SIZEOF*3,9
  618. PERIODS    dc.w    $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  619.     dc.w    $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  620.     dc.w    $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  621.     dc.w    $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  622.     dc.w    $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  623.     dc.w    $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  624.     dc.w    $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  625.     dc.w    $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  626.     dc.w    $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  627.     dc.w    $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  628.     dc.w    $10d0,$0fe0,$0f00,$0e28
  629. ;------------------------------------------------------------------------------
  630. ; PlayModule
  631. ;
  632. ; IN :    A1 = Address
  633. ;    D1 = VBlank/Cia (0=CIA)
  634. ;
  635. ; OUT:    Nothing
  636. ;
  637.  
  638. FC_PlayModule
  639.     movem.l    d0-d7/a0-a6,-(sp)
  640.     lea    FC_DataArea,a4
  641.     bsr.b    play
  642.  
  643.     move.l    F13_Global(a4),a5
  644.     move.l    APG_NotePlayer(a5),a5
  645.     jsr    (a5)
  646.     movem.l    (sp)+,d0-d7/a0-a6
  647.     rts
  648.  
  649. PLAY    lea    F13_PerVol(a4),a6
  650.     tst.w    F13_OnOff(a4)
  651.     bne.b    music_on
  652.     rts
  653.  
  654. music_on
  655.     subq.w    #1,F13_ReSpCnt(a4)    ;Decrease replayspeed counter
  656.     bne.b    nonewnote
  657.     move.w    F13_RepSpd(a4),F13_ReSpCnt(a4);Restore replayspeed counter
  658.     lea    F13_V1Data(a4),a0    ;Point to voice1 data area
  659.     bsr.w    new_note
  660.     lea    F13_V2Data(a4),a0    ;Point to voice2 data area
  661.     bsr.w    new_note
  662.     lea    F13_V3Data(a4),a0    ;Point to voice3 data area
  663.     bsr.w    new_note
  664.     lea    F13_V4Data(a4),a0    ;Point to voice4 data area
  665.     bsr.b    new_note
  666.  
  667. nonewnote
  668.     clr.w    F13_AudTemp(a4)
  669.     lea    F13_V1Data(a4),a0
  670.     bsr.w    effects
  671.     move.w    d0,(a6)+
  672.     move.w    d1,(a6)+
  673.     lea    F13_V2Data(a4),a0
  674.     bsr.w    effects
  675.     move.w    d0,(a6)+
  676.     move.w    d1,(a6)+
  677.     lea    F13_V3Data(a4),a0
  678.     bsr.w    effects
  679.     move.w    d0,(a6)+
  680.     move.w    d1,(a6)+
  681.     lea    F13_V4Data(a4),a0
  682.     bsr.w    effects
  683.     move.w    d0,(a6)+
  684.     move.w    d1,(a6)+
  685.  
  686.     lea    F13_PerVol(a4),a6
  687.     move.l    F13_Global(a4),a1
  688.     move.l    APG_ChannelInfo(a1),a1
  689.     move.w    (a6)+,NPC_Period(a1)
  690.     move.w    (a6)+,NPC_Volume(a1)
  691.     or.b    #NPCF_Period!NPCF_Volume,(a1)
  692.  
  693.     lea    NPChannel_SIZEOF(a1),a1
  694.     move.w    (a6)+,NPC_Period(a1)
  695.     move.w    (a6)+,NPC_Volume(a1)
  696.     or.b    #NPCF_Period!NPCF_Volume,(a1)
  697.  
  698.     lea    NPChannel_SIZEOF(a1),a1
  699.     move.w    (a6)+,NPC_Period(a1)
  700.     move.w    (a6)+,NPC_Volume(a1)
  701.     or.b    #NPCF_Period!NPCF_Volume,(a1)
  702.  
  703.     lea    NPChannel_SIZEOF(a1),a1
  704.     move.w    (a6)+,NPC_Period(a1)
  705.     move.w    (a6)+,NPC_Volume(a1)
  706.     or.b    #NPCF_Period!NPCF_Volume,(a1)
  707.     rts
  708.  
  709. new_note
  710.     moveq    #0,d5
  711.     move.l    34(a0),a1
  712.     adda.w    40(a0),a1
  713.     cmp.w    #64,40(a0)
  714.     bne.b    samepat
  715.     move.l    FC_DataArea+F13_Global,a2
  716.     move.l    APG_SendMsg(a2),a2
  717.     move.w    #MSG_NextPos,d2
  718.     jsr    (a2)            ;Send NextPos Message
  719.     move.l    (a0),a2
  720.     adda.w    6(a0),a2        ;Point to next sequence row
  721.     cmpa.l    52(a0),a2        ;Is it the end?
  722.     bne.b    notend
  723.     move.l    FC_DataArea+F13_Global,a2
  724.     move.l    APG_SendMsg(a2),a2
  725.     move.w    #MSG_NextMod,d2
  726.     jsr    (a2)            ;Send NextMod Message
  727.     move.w    d5,6(a0)
  728.     move.l    (a0),a2            ;Point to first sequence
  729.  
  730. notend    moveq    #1,d1
  731.     addq.b    #1,F13_SpdTemp(a4)
  732.     cmpi.b    #5,F13_SpdTemp(a4)
  733.     bne.b    nonewspd
  734.     move.b    d1,F13_SpdTemp(a4)
  735.     move.b    12(a2),d1        ;Get new replay speed
  736.     beq.b    nonewspd
  737.     move.w    d1,F13_ReSpCnt(a4)    ;store in counter
  738.     move.w    d1,F13_RepSpd(a4)
  739.  
  740. nonewspd
  741.     move.b    (a2),d1            ;Pattern to play
  742.     move.b    1(a2),44(a0)        ;Transpose value
  743.     move.b    2(a2),22(a0)        ;Soundtranspose value
  744.  
  745.     move.w    d5,40(a0)
  746.     lsl.w    #6,d1
  747.     add.l    F13_PATPoint(a4),d1    ;Get pattern pointer
  748.     move.l    d1,34(a0)
  749.     addi.w    #$000d,6(a0)
  750.     move.l    d1,a1
  751.  
  752. samepat    move.b    1(a1),d1        ;Get info byte
  753.     move.b    (a1)+,d0        ;Get note
  754.     bne.b    ww1
  755.     andi.w    #%11000000,d1
  756.     beq.b    noport
  757.     bra.b    ww11
  758.  
  759. ww1    move.w    d5,56(a0)
  760. ww11    move.b    d5,47(a0)
  761.     move.b    (a1),31(a0)
  762.  
  763.         ;31(a0) = PORTAMENTO/INSTR. info
  764.             ;Bit 7 = portamento on
  765.             ;Bit 6 = portamento off
  766.             ;Bit 5-0 = instrument number
  767.         ;47(a0) = portamento value
  768.             ;Bit 7-5 = always zero
  769.             ;Bit 4 = up/down
  770.             ;Bit 3-0 = value
  771. t_porton
  772.     btst    #7,d1
  773.     beq.b    noport
  774.     move.b    2(a1),47(a0)    
  775. noport    andi.w    #$007f,d0
  776.     beq.b    nextnote
  777.     move.b    d0,8(a0)
  778.     move.b    (a1),9(a0)
  779.     move.b    32(a0),d2
  780.     moveq    #0,d3
  781.     bset    d2,d3
  782.     or.w    d3,F13_AudTemp(a4)
  783.     move.b    (a1),d1
  784.     andi.w    #$003f,d1        ;Max 64 instruments
  785.     add.b    22(a0),d1
  786.     move.l    F13_VOLPoint(a4),a2
  787.     lsl.w    #6,d1
  788.     adda.w    d1,a2
  789.     move.w    d5,16(a0)
  790.     move.b    (a2),23(a0)
  791.     move.b    (a2)+,24(a0)
  792.     move.b    (a2)+,d1
  793.     andi.w    #$00ff,d1
  794.     move.b    (a2)+,27(a0)
  795.     move.b    #$40,46(a0)
  796.     move.b    (a2)+,d0
  797.     move.b    d0,28(a0)
  798.     move.b    d0,29(a0)
  799.     move.b    (a2)+,30(a0)
  800.     move.l    a2,10(a0)
  801.     move.l    F13_FRQPoint(a4),a2
  802.     lsl.w    #6,d1
  803.     adda.w    d1,a2
  804.     move.l    a2,18(a0)
  805.     move.w    d5,50(a0)
  806.     move.b    d5,26(a0)
  807.     move.b    d5,25(a0)
  808. nextnote
  809.     addq.w    #2,40(a0)
  810.     rts
  811.  
  812. effects    moveq    #0,d7
  813. testsustain
  814.     tst.b    26(a0)            ;Is sustain counter = 0
  815.     beq.b    sustzero
  816.     subq.b    #1,26(a0)        ;if no, decrease counter
  817.     bra.w    VOLUfx
  818.  
  819. sustzero                ;Next part of effect sequence
  820.     move.l    18(a0),a1        ;can be executed now.
  821.     adda.w    50(a0),a1
  822. testeffects
  823.     cmpi.b    #$e1,(a1)        ;E1 = end of FREQseq sequence
  824.     beq.w    VOLUfx
  825.     cmpi.b    #$e0,(a1)        ;E0 = loop to other part of sequence
  826.     bne.b    testnewsound
  827.     move.b    1(a1),d0        ;loop to start of sequence + 1(a1)
  828.     andi.w    #$003f,d0
  829.     move.w    d0,50(a0)
  830.     move.l    18(a0),a1
  831.     adda.w    d0,a1
  832. testnewsound
  833.     move.l    a4,-(sp)
  834.     cmpi.b    #$e2,(a1)        ;E2 = set waveform
  835.     bne.b    o49c64
  836.     moveq    #0,d0
  837.     moveq    #0,d1
  838.     move.b    32(a0),d1
  839.     bset    d1,d0
  840.     or.w    d0,F13_AudTemp(a4)
  841.     move.b    1(a1),d0
  842.     andi.w    #$00ff,d0
  843.     lea    F13_SoundInfo(a4),a4
  844.     add.w    d0,d0
  845.     move.w    d0,d1
  846.     add.w    d1,d1
  847.     add.w    d1,d1
  848.     add.w    d1,d0
  849.     adda.w    d0,a4
  850.     move.l    60(a0),a3
  851.     move.l    (a4),d1
  852.     add.l    #WAVEFORMS,d1
  853.     move.l    d1,NPC_Start(a3)
  854.     move.w    4(a4),NPC_Length+2(a3)
  855.     moveq    #0,d0
  856.     move.w    6(a4),d0
  857.     add.l    d0,d1
  858.     move.l    d1,NPC_LoopStart(a3)
  859.     move.w    8(a4),NPC_LoopLength+2(a3)
  860.     or.b    #NPCF_Sample!NPCF_Loop!NPCF_WordLength,(a3)
  861.     move.l    d1,68(a0)
  862.     move.l    6(a4),64(a0)
  863.     clr.w    16(a0)
  864.     move.b    #$01,23(a0)
  865.     addq.w    #2,50(a0)
  866.     move.l    (sp)+,a4
  867.     bra.w    o49d02
  868.  
  869. o49c64    cmpi.b    #$e4,(a1)
  870.     bne.b    testpatjmp
  871.     move.b    1(a1),d0
  872.     andi.w    #$00ff,d0
  873.     lea    F13_SoundInfo(a4),a4
  874.     add.w    d0,d0
  875.     move.w    d0,d1
  876.     add.w    d1,d1
  877.     add.w    d1,d1
  878.     add.w    d1,d0
  879.     adda.w    d0,a4
  880.     move.l    60(a0),a3
  881.     move.l    (a4),d1
  882.     add.l    #WAVEFORMS,d1
  883.     moveq    #0,d0
  884.     move.w    6(a4),d0
  885.     add.l    d0,d1
  886.     move.l    d1,NPC_LoopStart(a3)
  887.     move.w    8(a4),NPC_LoopLength+2(a3)
  888.     or.b    #NPCF_Loop!NPCF_WordLength,(a3)
  889.     move.l    d1,68(a0)
  890.     move.l    6(a4),64(a0)
  891.     addq.w    #2,50(a0)
  892.     move.l    (sp)+,a4
  893.     bra.b    o49d02
  894.  
  895. testpatjmp
  896.     move.l    (sp)+,a4
  897.     cmpi.b    #$e7,(a1)
  898.     bne.b    testnewsustain
  899.     move.b    1(a1),d0
  900.     andi.w    #$00ff,d0
  901.     lsl.w    #6,d0
  902.     move.l    F13_FRQPoint(a4),a1
  903.     adda.w    d0,a1
  904.     move.l    a1,18(a0)
  905.     move.w    d7,50(a0)
  906.     bra.w    testeffects
  907.  
  908. testnewsustain
  909.     cmpi.b    #$e8,(a1)        ;E8 = set sustain time
  910.     bne.b    o49cea
  911.     move.b    1(a1),26(a0)
  912.     addq.w    #2,50(a0)
  913.     bra.w    testsustain
  914.  
  915. o49cea    cmpi.b    #$e3,(a1)
  916.     bne.b    o49d02
  917.     addq.w    #3,50(a0)
  918.     move.b    1(a1),27(a0)
  919.     move.b    2(a1),28(a0)
  920.  
  921. o49d02    move.l    18(a0),a1
  922.     adda.w    50(a0),a1
  923.     move.b    (a1),43(a0)
  924.     addq.w    #1,50(a0)
  925.  
  926. VOLUfx    tst.b    25(a0)
  927.     beq.b    o49d1e
  928.     subq.b    #1,25(a0)
  929.     bra.b    o49d70
  930.  
  931. o49d1e    subq.b    #1,23(a0)
  932.     bne.b    o49d70
  933.     move.b    24(a0),23(a0)
  934.  
  935. o49d2a    move.l    10(a0),a1
  936.     adda.w    16(a0),a1
  937.     move.b    (a1),d0
  938.     cmpi.b    #$e8,d0
  939.     bne.b    o49d4a
  940.     addq.w    #2,16(a0)
  941.     move.b    1(a1),25(a0)
  942.     bra.b    VOLUfx
  943.  
  944. o49d4a    cmpi.b    #$e1,d0
  945.     beq.b    o49d70
  946.     cmpi.b    #$e0,d0
  947.     bne.b    o49d68
  948.     move.b    1(a1),d0
  949.     andi.l    #$003f,d0
  950.     subq.b    #5,d0
  951.     move.w    d0,16(a0)
  952.     bra.b    o49d2a
  953.  
  954. o49d68    move.b    (a1),45(a0)
  955.     addq.w    #1,16(a0)
  956. o49d70    move.b    43(a0),d0
  957.     bmi.b    o49d7e
  958.     add.b    8(a0),d0
  959.     add.b    44(a0),d0
  960. o49d7e    andi.w    #$007f,d0
  961.     lea    PERIODS(pc),a1
  962.     add.w    d0,d0
  963.     move.w    d0,d1
  964.     adda.w    d0,a1
  965.     move.w    (a1),d0
  966.     move.b    46(a0),d7
  967.     tst.b    30(a0)
  968.     beq.b    o49d9e
  969.     subq.b    #1,30(a0)
  970.     bra.b    o49df4
  971.  
  972. o49d9e    move.b    d1,d5
  973.     move.b    28(a0),d4
  974.     add.b    d4,d4
  975.     move.b    29(a0),d1
  976.     tst.b    d7
  977.     bpl.b    o49db4
  978.     btst    #0,d7
  979.     bne.b    o49dda
  980. o49db4    btst    #5,d7
  981.     bne.b    o49dc8
  982.     sub.b    27(a0),d1
  983.     bcc.b    o49dd6
  984.     bset    #5,d7
  985.     moveq    #0,d1
  986.     bra.b    o49dd6
  987.  
  988. o49dc8    add.b    27(a0),d1
  989.     cmp.b    d4,d1
  990.     bcs.b    o49dd6
  991.     bclr    #5,d7
  992.     move.b    d4,d1
  993. o49dd6    move.b    d1,29(a0)
  994. o49dda    lsr.b    #1,d4
  995.     sub.b    d4,d1
  996.     bcc.b    o49de4
  997.     subi.w    #$0100,d1
  998. o49de4    addi.b    #$a0,d5
  999.     bcs.b    o49df2
  1000. o49dea    add.w    d1,d1
  1001.     addi.b    #$18,d5
  1002.     bcc.b    o49dea
  1003. o49df2    add.w    d1,d0
  1004. o49df4    eori.b    #$01,d7
  1005.     move.b    d7,46(a0)
  1006.  
  1007. ; DO THE PORTAMENTO THING
  1008.     moveq    #0,d1
  1009.     move.b    47(a0),d1        ;get portavalue
  1010.     beq.b    a56d0            ;0=no portamento
  1011.     cmpi.b    #$1f,d1
  1012.     bls.b    portaup
  1013. portadown
  1014.     andi.w    #$1f,d1
  1015.     neg.w    d1
  1016. portaup    sub.w    d1,56(a0)
  1017. a56d0    add.w    56(a0),d0
  1018. o49e3e    cmpi.w    #$0070,d0
  1019.     bhi.b    nn1
  1020.     move.w    #$0071,d0
  1021. nn1    cmpi.w    #$06b0,d0
  1022.     bls.b    nn2
  1023.     move.w    #$06b0,d0
  1024. nn2    moveq    #0,d1
  1025.     move.b    45(a0),d1
  1026.     rts
  1027. ;------------------------------------------------------------------------------
  1028.     SECTION    WaveForms,DATA_C
  1029.  
  1030. WAVEFORMS
  1031.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1032.     dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1033.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1034.     dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1035.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1036.     dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1037.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1038.     dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1039.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1040.     dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1041.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1042.     dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1043.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1044.     dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1045.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1046.     dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1047.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1048.     dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1049.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1050.     dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1051.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1052.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1053.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1054.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1055.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1056.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1057.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1058.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1059.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1060.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1061.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1062.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1063.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1064.     dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1065.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1066.     dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1067.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1068.     dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1069.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1070.     dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1071.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1072.     dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1073.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1074.     dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1075.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1076.     dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1077.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1078.     dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1079.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1080.     dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1081.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1082.     dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1083.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1084.     dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1085.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1086.     dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1087.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1088.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1089.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1090.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1091.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1092.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1093.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1094.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1095.     dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1096.     dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1097.     dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1098.     dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1099.     dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1100.     dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1101.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1102.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1103.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1104.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1105.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1106.     dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1107.     dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1108.     dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1109.     dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1110.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1111.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1112.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1113.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1114.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1115. ;------------------------------------------------------------------------------
  1116.     SECTION    DataArea,BSS
  1117.  
  1118. FC_DataArea
  1119.     ds.b    Future13Struct_SIZEOF
  1120. ;------------------------------------------------------------------------------
  1121. SLUT
  1122.